package com.atguigu.gmall.product.client;

import com.alibaba.fastjson.JSONObject;
import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.model.product.*;
import com.atguigu.gmall.product.client.impl.ProductDegradeFeignClient;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @author Fxz
 * @version 1.0
 * @date 2022-02-08 9:52
 */
@FeignClient(value = "service-product", fallbackFactory = ProductDegradeFeignClient.class)
public interface ProductFeignClient {

	/**
	 * 根据skuId获取sku信息
	 */
	@GetMapping("/api/product/inner/getSkuInfo/{skuId}")
	public SkuInfo getSkuInfo(@PathVariable Long skuId);

	/**
	 * 通过三级分类id查询分类信息
	 * @param category3Id
	 * @return
	 */
	@GetMapping("/api/product/inner/getCategoryView/{category3Id}")
	BaseCategoryView getCategoryView(@PathVariable("category3Id") Long category3Id);

	/**
	 * 获取sku最新价格
	 * @param skuId
	 * @return
	 */
	@GetMapping("/api/product/inner/getSkuPrice/{skuId}")
	BigDecimal getSkuPrice(@PathVariable Long skuId);

	/**
	 * 根据spuId，skuId 查询销售属性集合
	 * @param skuId
	 * @param spuId
	 * @return
	 */
	@GetMapping("/api/product/inner/getSpuSaleAttrListCheckBySku/{skuId}/{spuId}")
	List<SpuSaleAttr> getSpuSaleAttrListCheckBySku(@PathVariable("skuId") Long skuId,
			@PathVariable("spuId") Long spuId);

	/**
	 * 根据spuId 查询map 集合属性
	 * @param spuId
	 * @return
	 */
	@GetMapping("/api/product/inner/getSkuValueIdsMap/{spuId}")
	Map getSkuValueIdsMap(@PathVariable("spuId") Long spuId);

	/**
	 * 获取所有分类数据集合
	 */
	@GetMapping("/api/product/getBaseCategoryList")
	Result<List<JSONObject>> getBaseCategoryList();

	/**
	 * 跟据品牌id获取品牌数据
	 */
	@GetMapping("/api/product/inner/getTrademark/{tmId}")
	BaseTrademark getTrademark(@PathVariable Long tmId);

	/**
	 * 跟据skuId获取平台属性、平台属性值
	 */
	@GetMapping("/api/product/inner/getAttrList/{skuId}")
	List<BaseAttrInfo> getAttrList(@PathVariable Long skuId);

}
